.版本 2
.支持库 edroptarget
.支持库 EThread
.支持库 spec
.支持库 iext

.程序集 窗口程序集_窗口1
.程序集变量 工作线程池EX, 鱼刺类_线程池Ex
.程序集变量 工作中, 逻辑型
.程序集变量 导出存放id, 文本型

.子程序 _窗口1_创建完毕
.局部变量 Test, 文本型

加载皮肤 (18)
.如果真 (文件是否存在 (取运行目录 () ＋ “\RSCProject.dll”) ＝ 假)
    .如果真 (取反 (写到文件 (取运行目录 () ＋ “\RSCProject.dll”, #RSCProjectDLL)))
        提示框 (“文件写出失败！！！”)
        返回 ()
    .如果真结束

.如果真结束



Test ＝ 取运行目录 () ＋ “\huya\”
全目录临时 ＝ Test ＋ “临时”
全目录状态 ＝ Test ＋ “状态”
全目录导出 ＝ Test ＋ “导出”
.如果真 (文件是否存在 (Test) ＝ 假)
    目录_创建 (Test)
.如果真结束
.如果真 (文件是否存在 (全目录临时) ＝ 假)
    目录_创建 (全目录临时)
.如果真结束
.如果真 (文件是否存在 (全目录状态) ＝ 假)
    目录_创建 (全目录状态)
.如果真结束
.如果真 (文件是否存在 (全目录导出) ＝ 假)
    目录_创建 (全目录导出)
.如果真结束

配置_读取_易语言组件 (窗口1)
写入列表 ()
??? ()  ' <!!!>
拖放对象1.注册拖放控件 (超表_状态.取窗口句柄 ())

.子程序 _按钮_登录平台_被单击

启动线程 (&子程序登录平台, , )

.子程序 子程序登录平台, , , http://api.sqhyw.net:90
.局部变量 str, 文本型
.局部变量 yyjson, json对象
.局部变量 token, 文本型

str ＝ 编码_Utf8到Ansi (网页_访问_对象 (“https://api.haozhuma.com/sms/?api=login&user=” ＋ 删首尾空 (编辑框_user.内容) ＋ “&pass=” ＋ 删首尾空 (编辑框_pass.内容), , , ))
调试输出 (str)
yyjson.清空 ()
yyjson.解析 (str)
token ＝ yyjson.取文本 (“token”)
.如果真 (token ≠ “”)
    全登录token ＝ token
    提示框 (“登录成功”, , , , 1000)
    返回 ()
.如果真结束

提示框 (“失败：” ＋ str)

.子程序 _按钮_启动_被单击

.如果真 (全登录token ＝ “” 且 组合框_功能.现行选中项 ＝ 0)
    提示框 (“请先登录平台，再操作...”)
    返回 ()
.如果真结束


.判断开始 (按钮_启动.标题 ＝ “启动”)
    按钮_启动.禁止 ＝ 真
    .如果真 (线程_创建 (&工作线程) ＝ 假)
        按钮_启动.禁止 ＝ 假
        返回 ()
    .如果真结束

.判断 (按钮_启动.标题 ＝ “停止”)
    按钮_启动.禁止 ＝ 真
    按钮_启动.标题 ＝ “停止中...”
    工作中 ＝ 假
    工作线程池EX.销毁 ()
    返回 ()
.默认

.判断结束


.子程序 工作线程
.局部变量 bool, 逻辑型
.局部变量 int, 整数型
.局部变量 P, 整数型
.局部变量 任务数, 整数型

按钮_启动.标题 ＝ “启动中...”
bool ＝ 工作线程池EX.创建 (到整数 (删首尾空 (编辑框_工作线程.内容)), , , 真, , 1024 × 128)
.如果真 (bool ＝ 假)
    提示框 (“初始化工作线程池失败！”)
    按钮_启动.标题 ＝ “启动”
    按钮_启动.禁止 ＝ 假
    返回 ()
.如果真结束

全成功数 ＝ 0
工作中 ＝ 真
按钮_启动.标题 ＝ “停止”
按钮_启动.禁止 ＝ 假
.如果 (组合框_功能.现行选中项 ＝ 0)
    .判断循环首 (工作中 ＝ 真)
        .计次循环首 (到整数 (编辑框_工作线程.内容), )
            工作线程池EX.投递任务 (&线程子程序)
            程序_延时 (到整数 (删首尾空 (编辑框_线程间隔.内容)))
        .计次循环尾 ()
        工作线程池EX.等待任务动态 ()
    .判断循环尾 ()

.否则
    .判断循环首 (工作中 ＝ 真)
        任务数 ＝ 工作线程池EX.取_执行线程数 () ＋ 工作线程池EX.取_队列任务数 ()
        任务数 ＝ 工作线程池EX.取_最大线程容量 () － 任务数
        .如果 (任务数 ＞ 0)
            .如果真 (超表_状态.取当前状态图片 (int) ＝ 1)
                工作线程池EX.投递任务 (&线程子程序, int)
                程序_延时 (到整数 (删首尾空 (编辑框_线程间隔.内容)))
            .如果真结束

            int ＝ int ＋ 1

        .否则
            程序_延时 (10)
        .如果结束

        .如果真 (int ≥ 超表_状态.取表项数 ())
            跳出循环 ()
        .如果真结束

    .判断循环尾 ()

.如果结束

.循环判断首 ()
    程序_延时 (500)
.循环判断尾 (工作线程池EX.取_是否完全空闲 () ＝ 假)
状态条1.置文本 (0, “正在销毁工作线程池....”)
工作线程池EX.销毁 ()
按钮_启动.标题 ＝ “启动”
按钮_启动.禁止 ＝ 假
状态条1.置文本 (0, “执行停止完毕!”)
提示框 (“执行停止完毕！”)

.子程序 线程子程序
.参数 索引E, 整数型
.局部变量 返回手机, 文本型
.局部变量 P, 整数型
.局部变量 信息, 文本型
.局部变量 返回短信, 文本型
.局部变量 bool, 逻辑型
.局部变量 局pass, 文本型
.局部变量 局_context, 文本型
.局部变量 返回sdid, 文本型
.局部变量 返回requestId, 文本型
.局部变量 返回authId, 文本型
.局部变量 返回sessionData, 文本型
.局部变量 bool2, 逻辑型
.局部变量 局_pass, 文本型
.局部变量 局_user, 文本型
.局部变量 局_cook, 文本型
.局部变量 返回Cookie, 文本型

.如果真 (工作中 ＝ 假)
    返回 ()
.如果真结束

.如果真 (组合框_功能.现行选中项 ＝ 0)
    .如果真 (全成功数 ≥ 到整数 (删首尾空 (编辑框_注册数量.内容)))
        工作中 ＝ 假
        返回 ()
    .如果真结束

    .如果真 (取反 (取手机 (删首尾空 (编辑框_项目id.内容), 返回手机)))
        状态条1.置文本 (0, 返回手机)
        返回 ()
    .如果真结束

    ' 局pass ＝ 文本_取随机字母 (汇编_取随机数 (3, 5), 0) ＋ 文本_取随机数字 (汇编_取随机数 (6, 8))

    全E锁.写进入 ()
    索引E ＝ 超表_状态.插入表项 (, , , , , )
    超表_状态.置标题 (索引E, 0, 到文本 (索引E ＋ 1))
    超表_状态.置标题 (索引E, 1, 返回手机)
    超表_状态.保证显示 (索引E)
    ' 超表_状态.置标题 (索引E, 2, 局pass)
    全E锁.写退出 ()


    局_context ＝ “WB-” ＋ 生成guid () ＋ “-” ＋ 到大写 (生成guid ()) ＋ “-” ＋ 生成guid ()

    窗口_置表项状态 (索引E, “发送短信...”)
    bool ＝ hy注册_发送短信 (返回手机, 局_context, 返回sdid, 返回sessionData)
    窗口_置表项状态 (索引E, 返回sessionData)
    ' ' 发送短信
    .如果真 (bool ＝ 假)
        ' 拉黑号码 (删首尾空 (编辑框_项目id.内容), 返回手机)
        返回 ()
    .如果真结束

    .计次循环首 (60, P)
        窗口_置表项状态 (索引E, “取短信[” ＋ 到文本 (P) ＋ “]”)
        bool ＝ 取短信 (删首尾空 (编辑框_项目id.内容), 返回手机, 返回短信)
        .如果真 (bool ＝ 真)
            跳出循环 ()
        .如果真结束

        程序_延时 (1000)
    .计次循环尾 ()
    .如果真 (取反 (bool))
        窗口_置表项状态 (索引E, “取短信超时35s”)
        ' 拉黑号码 (删首尾空 (编辑框_项目id.内容), 返回手机)
        返回 ()
    .如果真结束

    窗口_置表项状态 (索引E, “提交短信...”)
    bool2 ＝ hy提交_短信登录 (返回手机, 返回短信, 局_context, 返回sdid, 返回sessionData, 返回Cookie)
    窗口_置表项状态 (索引E, 返回Cookie)
    .如果真 (bool2 ＝ 真)
        _原子递增 (全成功数)
        窗口_置CK (索引E, 返回Cookie ＋ “----” ＋ 返回手机, “注册成功”)
        CK入库 (返回Cookie ＋ “----” ＋ 返回手机, “hy注册成功”, 全目录状态)
        返回 ()
    .如果真结束

.如果真结束



.子程序 _粘贴数据_被选择

T粘贴数据 (超表_状态)

.子程序 _删除勾选_被选择

T删除勾选 (超表_状态)

.子程序 _全选_被选择

T全选 (超表_状态)

.子程序 _反选_被选择

T反选 (超表_状态)

.子程序 _导出_被选择

启动线程 (&保存勾选, , )

.子程序 保存勾选
.局部变量 导出到文件, 鱼刺类_输出文本
.局部变量 j_str, 文本型
.局部变量 开始时间, 整数型
.局部变量 耗时, 整数型
.局部变量 N, 整数型
.局部变量 a1, 文本型
.局部变量 a2, 文本型
.局部变量 a3, 文本型
.局部变量 a4, 文本型
.局部变量 导出存放文件名, 文本型
.局部变量 全目录导出, 文本型

开始时间 ＝ 取启动时间 ()
提示框 (“正在导出数据....”, , , , 1000)
.计次循环首 (超表_状态.取表项数 (), N)
    系统_处理事件 ()
    .如果真 (超表_状态.取当前状态图片 (N － 1) ＝ 1)
        全E锁.读进入 ()
        a1 ＝ 超表_状态.取标题 (N － 1, 1)
        a2 ＝ 超表_状态.取标题 (N － 1, 2)
        a3 ＝ 超表_状态.取标题 (N － 1, 3)
        全E锁.读退出 ()
        j_str ＝ a1 ＋ “----” ＋ a2 ＋ “----” ＋ a3
        导出到文件.写文本行 (j_str, “导出数据”, 取运行目录 () ＋ “\”, “.txt”)
    .如果真结束

.计次循环尾 ()
导出到文件.关闭所有文件占用 ()
提示框 (“导出完成”, , , , 2000)

.子程序 _超表_状态_右键单击表项

弹出菜单 (菜单, , )

.子程序 _窗口1_将被销毁

配置_保存_易语言组件 (窗口1)
写出列表 ()

.子程序 _清空列表_被选择

超表_状态.全部删除 ()

.子程序 _勾选搜索列表_被选择
.局部变量 局_存放, 文本型

载入 (窗口2, , 真)

.子程序 GetIP, 文本型
.局部变量 str, 文本型
.局部变量 bool, 逻辑型

.如果真 (选择框_开启代理.选中 ＝ 真)
    .循环判断首 ()
        str ＝ 编码_Utf8到Ansi (网页_访问_对象 (删首尾空 (编辑框_代理IP.内容)))
        状态条1.置文本 (0, “获取代理：” ＋ str)
        bool ＝ 是否IP格式 (str)
        程序_延时 (300)
    .循环判断尾 (取反 (bool))

.如果真结束

返回 (str)

.子程序 是否IP格式, 逻辑型
.参数 IP, 文本型
.局部变量 正则, 正则表达式类

正则.创建 (“([1-9]\d{0,2}\.\d{1,3}\.\d{1,3}\.\d{1,3}):([1-9]\d{1,4})”, IP, , , , )
返回 (正则.取匹配数量 () ＞ 0)

.子程序 _拖放对象1_得到文件
.参数 接收到的文件路径, 文本型
.局部变量 time, 整数型

窗口1.禁止 ＝ 真
状态条1.置文本 (0, “文件已拖入,正在导入列表...”)
超表_状态.可视 ＝ 假
超表_状态.禁止重画 ()
超表_状态.表项 ＝ {  }
超表_状态.可视 ＝ 真
超表_状态.允许重画 ()
超表导入文本 (超表_状态, 接收到的文件路径, , “----”, 位或 (1, 2, 3, 4), 假, time)
超表_状态.保证显示 (超表_状态.取表项数 () － 1)
窗口1.禁止 ＝ 假
